package solitaire.InterfacesControle;

import solitaire.InterfacesPresentation.IPTas;
import solitaire.application.Carte;
import solitaire.application.Tas;

public interface ICTas {
	public Tas getAbstraction();
	public IPTas getPresentation();
	
	/**
	 * depile la carte au sommet du tas de cartes 
	 */
	 public void depilerICCarte();
	 
	 /**
	  * empile une carte sur le tas de cartes
	  * @param carte
	  */
	 public void empiler(Carte carte);
	 
	 /**
	  * empile un tas sur le tas de cartes
	  * @param tas
	  */
	 public void empiler(ICTas tas);
	 
	 
	 /**
	  * donne la carte a la base du tas de cartes
	  * @return
	  */
	 public ICCarte getICCarteBase();
	 
	 /**
	  * donne la carte en position n du double tas
	  * @param n
	  * @return
	  */
	 public ICCarte getICCarte(int n);
	 
	 /**
	  * indique le nom du tas de cartes
	  * @return
	  */
	 public String getNom();
	 
	 /**
	  * indique le nombre de cartes du tas de cartes
	  * @return
	  */
	 public int getNombre();
	 
	 /**
	  * donne la carte au sommet du tas de cartes
	  * @return
	  */
	 public ICCarte getICCarteSommet();
	 
	 /**
	  * indique si le tas de cartes est un tas de cartes alternees
	  * @return
	  */
	 public boolean isAlterne();
	 
	 /**
	  * indique si une carte est empilable sur le tas de cartes
	  * @param carte
	  * @return
	  */
	 public boolean isEmpilable(ICCarte carte);
	 
	 /**
	  * indique si un tas de cartes est empilable sur le tas de cartes
	  * @param tas
	  * @return
	  */
	 public boolean isEmpilable(ICTas tas);
	 
	 /**
	  * indique si les n cartes au sommet d'un tas de cartes sont empilables sur le tas de cartes
	  * @param tas
	  * @param n
	  * @return
	  */
	 public boolean isEmpilable(ICTas tas,int n);
	 
	 /**
	  * indique si un tas de cartes est vide
	  * @return
	  */
	 public boolean isVide();
	 
	 /**
	  * recopie d'un tas de cartes dans le tas de cartes courant
	  * @param tas
	  */
	 public void recopier(ICTas tas);
	 
	 public ICTas copy();
	  
}
